步进电机28BYJ

您所在的位置:网站首页 l298n控制步进电机 角度 步进电机28BYJ

步进电机28BYJ

#步进电机28BYJ| 来源: 网络整理| 查看: 265

步进电机28BYJ-48的驱动(arduino平台,STM32),最全的驱动详细原理,驱动电路分析,驱动代码解释

 

目录

步进电机28BYJ-48的驱动(arduino平台,STM32),最全的驱动详细原理,驱动电路分析,驱动代码解释

前言

一、步进电机28BYJ-48结构和工作原理

1.基本知识:

2.步进电机28BYJ-48结构:

3.步进电机的控制的基本概念

4.步进电机28BYJ-48工作原理

5.步进电机的驱动拍数设定模式

6.步进电机的驱动参数解读

二、驱动电路分析和使用

1.ULN2003驱动电路

2.L298N小功率驱动电路

三.驱动代码分析

1.ULN2003驱动代码分析

(1)驱动库:

(2)应用案例:

 2.L298N驱动代码分析

(1)驱动库

(2)应用案例

四、Arduino STM32驱动参考代码下载

1.ULN200驱动库下载链接:

2.L298N驱动库下载链接:

3.STM32驱动库链接:

总结

 

前言

在本网站查找了很多资料,收益匪浅,今来研究了步进电机28BYJ-48的驱动,查了很多资料,发现介绍不够详细,没有抓到关键点,特别是原理,只有原理清楚才能实现精确控制。因此写了本文,借用一些作者的资源,表示感谢,以飨读者,回报大家!

提示:以下是本篇文章正文内容,下面案例可供参考

一、步进电机28BYJ-48结构和工作原理 1.基本知识:

步进电机:是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB),后两种常用。

步进电机控制特点:1、它是通过输入脉冲信号来进行控制的。2、电机的总转动角度由输入脉冲数决定。3、电机的转速由脉冲信号频率决定。

2.步进电机28BYJ-48结构:

3.步进电机的控制的基本概念

4.步进电机28BYJ-48工作原理

5.步进电机的驱动拍数设定模式

6.步进电机的驱动参数解读

二、驱动电路分析和使用 1.ULN2003驱动电路

 

 

2.L298N小功率驱动电路

三.驱动代码分析

arduino自带的steper驱动库,针对两相电机,而我们驱动的28BYJ48步进电机时四相的,直接使用不可以,笔者试用发现电机嗯嗯响不转动,如果要用自带库,可以对电机接线进行调换改造,或者修改驱动里的拍子表,太麻烦一些。

我们采用自建的驱动库,知道工作原理,驱动库可以自建。

1.ULN2003驱动代码分析 (1)驱动库: /* * 用法: 1、把Stepper28BYJ48.zip解压在libraries目录下 2、电机通过ULN2003驱动板和ULN2803驱动板测试通过 3、驱动的输入依次接arduino的8~9,步进电机依次接蓝,粉,黄,橙。 */ // ensure this library description is only included once #ifndef Stepper28BYJ48_h #define Stepper28BYJ48_h // library interface description class Stepper { public: // constructors: Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4); // speed setter method: void setSpeed(long whatSpeed); // mover method: void step(int number_of_steps); private: void stepMotor(int this_step); int direction; // Direction of rotation int speed; // Speed in RPMs unsigned long step_delay; // delay between steps, in ms, based on speed int number_of_steps; // total number of steps this motor can take int pin_count; // how many pins are in use. int step_number; // which step the motor is on // motor pin numbers: int motor_pin_1; int motor_pin_2; int motor_pin_3; int motor_pin_4; unsigned long last_step_time; // time stamp in us of when the last step was taken }; #endif (2)应用案例: /* 控制28BYJ48电机,正转一圈,反转一圈 */ #include const int stepsPerRevolution = 4096; //28BYJ48电机旋转一周需要的步数 // 电机接在引脚8 ~ 11: 电机线依次为蓝,粉,黄,橙 Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); int stepCount = 0; // number of steps the motor has taken void setup() { // initialize the serial port: Serial.begin(9600); //设置电机转速r/min myStepper.setSpeed(10); } void loop() { // 正转一圈 myStepper.step(stepsPerRevolution); Serial.print("steps:" ); Serial.println(stepsPerRevolution); delay(5000); // 反转一圈 myStepper.step(-stepsPerRevolution); Serial.print("steps:" ); Serial.println(-stepsPerRevolution); delay(5000); // 正转64步 myStepper.step(64); Serial.print("steps:" ); Serial.println(64); delay(5000); // 正转64步 myStepper.step(64); Serial.print("steps:" ); Serial.println(64); delay(5000); }  2.L298N驱动代码分析 (1)驱动库

参考网上驱动库,经过我修改完善,运行很好。

// library interface description //二相步进电机可以用arduino IDE 自带的实例里的程序和库驱动,。但是 Steper_28BYJ48四相的驱动不了 class Steper_28BYJ48 { public: // constructors: Steper_28BYJ48(unsigned int speed_ratio,unsigned int beat_mode, int motor_pin_1, int motor_pin_2, int motor_pin_3, int motor_pin_4); // mover method: void step(int degree_to_move); //set speed void setSpeed(unsigned int step_delay); void lowPower_idel(); private: unsigned int beat_mode; //1:EightBeat��2:FourBeat��3:DoubleFourBeat unsigned int step_delay; // delay between steps, in ms, based on speed unsigned int speed_ratio ; // motor pin numbers: int motor_pin_1; int motor_pin_2; int motor_pin_3; int motor_pin_4; }; (2)应用案例

应用这个库编写了案例,实现功能,通过串口1进行交互,输入转动角度,实现控制电机转动角度,修改代码可以体验驱动步进电机拍数3种模式,1:EightBeat,2:FourBeat,3:DoubleFourBeat

代码使用说明在程序头部。

/*接线:务必不要错了,不然查错非常头大! L298输入1-4 对应 arduino数字端口 8,9,10,11 L298电路板输出有两种接口,一种是有步进电机的卡扣端子ABCD+vcc,一种是输出端子:out1--A+白,OUT2--A-蓝,out3--B+黄,out4--B-绿,电源端接红线5V 或者 红线接电源5V,橙色电线接out4口,黄色电线接out3口,粉色电线接out2口,蓝色接out1口根据提示进行接线。 //思路是通过减速比来控制单步执行的脉冲次数,电机是减速比16,电机每一个脉冲前进5.625度,而主轴前进5.625/16=0.3515625度,但经过我测试,这种玩具级的电机主轴低于5.625度步进的精度是无法保障的,因此我简化了代码,每步执行16次脉冲。 //接线顺序是红->﹢5V,橙黄粉蓝分别接L298N 的OUT1、OUT2、OUT3、OUT4, arduino的8,9,10,11分别接L298N的IN1-IN4 */ /*28BYJ-48步进电机的齿轮减速比常见有两种,1:16,1:64, * 步距角:θ=360度/(转子齿数J*运行拍数),齿数为8,八拍运行,电机主轴的步距角为θ=360度/(8*8)=5.625度(俗称半步),在除以减速比64,所以输出轴的步距角:5.625/64。 电机参数表中的减速比这个参数吧——1:64,转子转64圈,最终输出轴才会转一圈,也就是需要64*64=4096个节拍输出轴才转过一圈,2 ms*4096=8192 ms,8秒多才转一圈4096个节拍转动一圈,那么一个节拍转动的角度——步进角度就是360/4096,看一下表中的步进角度参数5.625/64。 要输出某一角度degree,求输出步数N=(degree*减速比)*(齿数*运行拍数)/360 启动频率是≥550,单位是 P.P.S,即每秒脉冲数,这里的意思就是说:电机保证在你每秒给出550个步进脉冲的情况下,可以正常启动。那么换算成单节拍持续时间就是 1 s/550=1.8 ms,为了让电机能够启动,我们控制节拍刷新时间大于 1.8 ms 就可以了。 减速比为1:64情况下 4步控制信号序列:11.25度/步,主电机32步旋转一周。 8步控制信号序列:5.625度/步,主电机64步旋转一周,减速轴旋转一周将用:64(步/周)X64(齿轮比) = 4096 步 测试电机减速比为1:16,8拍模式下旋转一周将用:64(步/周)X16(齿轮比) = 1024 步。*/ #include "Steper_28BYJ48.h" //自带驱动,也可以加入驱动库 Steper_28BYJ48 steper(16, 1, 8, 9, 10, 11); //6个参数为:第1个是步进电机减速比,第2个是步进电机拍数模式设定,1:EightBeat,2:FourBeat,3:DoubleFourBeat,另外4个驱动引脚 int degree; //转动的角度,负值为逆时针方向。 String inString = ""; // 用于转换数字的字符串缓冲区 String read_String = ""; unsigned char dir = 3; //1顺时针方向。clockwise,2逆时针。3,空闲等待。 void setup() { Serial.begin(9600); //初始化串口,作为监视。 steper.setSpeed(3);//节拍刷新时间,一般要大于2ms// delay between steps, in ms, based on speed,if delay 0) { inChar = Serial.read(); read_String += (char)inChar; delay(2); } if (read_String.length() != 0) { Serial.println("**********************************************************************"); Serial.print("serial port read_string:"); Serial.println(read_String); if (read_String.charAt(0) == '-') { dir = 0; Serial.print("turn direction:"); Serial.println("CounterClockWise"); degree = (read_String.substring(1)).toInt(); } else { Serial.print("turn direction:"); Serial.println("ClockWise"); dir = 1; degree = read_String.toInt(); } read_String = ""; } if (dir == 1)//CW { steper.step(degree); steper.lowPower_idel(); Serial.print("Motor finished degree: "); Serial.println(degree); Serial.println("**********************************************************************"); dir = 3; } if (dir == 0)//CCW { degree=0-degree; steper.step(degree); steper.lowPower_idel(); dir = 3; Serial.print("Motor finished degree: "); Serial.println(degree); Serial.println("**********************************************************************"); } degree = 0; delay(5000); } 四、Arduino STM32驱动参考代码下载 1.ULN200驱动库下载链接:

https://download.csdn.net/download/anchoretor/15176116

2.L298N驱动库下载链接:

https://download.csdn.net/download/anchoretor/15176829

3.STM32驱动库链接:

https://download.csdn.net/download/anchoretor/15270614

总结

1首先需要熟悉步进电机28BYJ-48的机构,工作原理。驱动拍的工作特点。关键:五线四相结构,驱动的步进角公式会计算。

2..驱动库编写需要针对不同驱动电路的设计,驱动电路的使用工作原理。关键:ULn2003驱动电路特点,输入和输出是反相,输入高电平,驱动输出端拉低,驱动绕组励磁工作。L298N驱动电路特点,输入和输出是同相,输入低电平,驱动输出端拉低,驱动绕组励磁工作。

3.应用代码分析,通过应用大家熟悉如何使用自建库,同时完成实践应用,知行合一多多练习。

4.看过有用,鼓励一下我的劳动成果,收藏点个赞呗,能力有限,有错误地方欢迎指正。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3